package com.yc.thread;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.*;

/**
 * 前两种方案都无法获得新线程的执行结果,引入异步任务方案
 * 带返回值的,FutureTask做任务类
 */

public class Test4_callable_FutureTask {
    public static void main(String[] args) throws Exception {
        //定义一个异步任务类，它有返回值:
        FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() {
            //任务功能是 累加和
            @Override
            public Integer call() throws Exception {
                int count =0;
                for(int i=0;i<10;i++){
                    Thread.sleep(1000);
                    count+=i;
//                    if(i==10){
//                        throw new RuntimeException("error");
//                    }
                }
                return count;
            }
        });
        Thread t1 = new Thread(task1);
        t1.start();
        //方式1
        //最大的不同在此: 可以获取任务的执行结果
//        System.out.println("累加和:"+task1.get(1, TimeUnit.SECONDS));//只等一秒钟出结果
        System.out.println("累加和为："+task1.get()); // //阻塞式
        System.out.println("请理解什么是阻塞式");


        //方式二
        FutureTask<Integer> task2= new FutureTask(()->{
            int count =0;
            for(int i=0;i<10;i++){
                Thread.sleep(1000);
                count+=i;
            }
            return count;
        });
        Thread t2= new Thread(task2);
        t2.start();
        System.out.println("累加和为："+task2.get());
    }
}
